"""
概念：是一个闭包，把一个函数作为参数，返回一个替代版函数，本质上是一个返回函数的函数


"""
#在不修改原函数的前提下，增加函数功能，最好的方式是使用装饰器
# def func():
#     print("lifeibiao is a good man")
#
# def f():
#     print("*************")
#     func()
# f()
#
# #闭包
# #简单装饰器
# def wrapper(e):
#     def inner():
#         print("***********")
#         e()
#     return inner
# func = wrapper(func)
# func()

#复杂装饰器

#不修改say原函数的情况下增加say的功能，判断say中的age是否符合常理
def wrapper(f):
    def inner1(name, age):
        #增加功能
        if age <= 0:
            age = 0
        return f(name,age)
    return inner1
# say = wrapper(say)
@wrapper #相当于say = wrapper(say)
def say(name, age):
    return "%s is a good man,he is %d years old!"%(name, age)

print(say("lifeibiao", -24))


#使用@符号将装饰器应用到函数上，在函数定义前加上@wrapper表明装饰器
